package com.itheima.demo01;

//测试类
public class PersonTest {
    public static void main(String[] args) {
        //测试空参构造.
        //1. 通过多态的方式创建Teacher类对象.
        Person t = new Teacher();
        //2. 给属性赋值.
        t.setName("夯哥");
        t.setAge(18);
        //3.打印属性值
        System.out.println(t.getName() + "..." + t.getAge());
        //1.4 调用方法.
        t.eat();
        //多态的成员方法的访问特点: 编译看左, 运行看右.
        //5. 通过向下转型, 调用catchMouse()
        //多态的弊端: 父类引用不能直接使用子类的特有成员.
        Teacher t12 = (Teacher) t;      //老师类独有的自己的功能.
        t12.teach();

        System.out.println("--------------------");

        //测试全参构造.
        //1. 通过多态的方式创建Teacher类对象.
        Person t2 = new Teacher("刘亦菲", 33);
        //2.打印属性值
        System.out.println(t2.getName() + "..." + t2.getAge());
        //3. 调用eat()
        t2.eat();          //多态的成员方法的访问特点: 编译看左, 运行看右.
        //4. 通过向下转型, 调用teach()
        //多态的弊端: 父类引用不能直接使用子类的特有成员.
        Teacher t22 = (Teacher) t;      //老师类独有的自己的功能.
        t22.teach();

        System.out.println("--------------------");

        //测试空参构造.
        //1. 通过多态的方式创建Student类对象.
        Person s = new Student();
        //2. 给属性赋值.
        s.setName("夯哥");
        s.setAge(18);
        //3.打印属性值
        System.out.println(s.getName() + "..." + s.getAge());
        //1.4 调用方法.
        s.eat();
        //多态的成员方法的访问特点: 编译看左, 运行看右.
        //5. 通过向下转型, 调用study()
        //多态的弊端: 父类引用不能直接使用子类的特有成员.
        Student s12 = (Student) s;      //Student类独有的自己的功能.
        s12.study();

        System.out.println("--------------------");

        //测试全参构造.
        //1. 通过多态的方式创建Student类对象.
        Person s2 = new Student("刘亦菲", 33);
        //2.打印属性值
        System.out.println(s2.getName() + "..." + s2.getAge());
        //3. 调用eat()
        s2.eat();          //多态的成员方法的访问特点: 编译看左, 运行看右.
        //4. 通过向下转型, 调用teach()
        //多态的弊端: 父类引用不能直接使用子类的特有成员.
        Student s22 = (Student) s;      //Student类独有的自己的功能.
        s22.study();
    }
}
